//#include<iostream>
//#include<alogrithm>
//using namespace std;
//
//const int N=210;
//int arr[N], sign[N];
//int n, k, ret;
//
//void dfs(int pos, int begin)
//{
//	if(pos>k)
//	{
//		ret++;
//		return;
//	} 
//	
//	for(int i=begin; i<=n; i++)
//	{
//		if(sign[i]) continue;
//		int newpos=i;
//		while(newpos<=n && arr[i]==arr[newpos]) newpos++;
//		sign[i]=true;
//		dfs(pos+1, newpos);
//		sign[i]=false;
//	}
//}
//
//int main()
//{
//	cin>>n>>k;
//	for(int i=1; i<=n; i++) cin>>arr[i];
//	sort(arr+1, arr+n+1);
//	dfs(1, 1);
//	cout<<ret;
//	return 0;
// } 
#include<iostream>
using namespace std;

int path, ret;
int n, k;


void dfs(int begin, int pos)
{
	if(pos>k)
	{
		if(path==n) ret++;
		return ;
	}
	
	for(int i=begin; i<=n; i++)
	{
		if(path + (k-pos+1)*i > n) return ;
		path+=i;
		dfs(i, pos+1);
		path-=i;
	}
}
int main()
{
	cin>>n>>k;
	dfs(, 1);
	cout<<ret;
	return 0;
}










































